#!/usr/bin/python3
# -*- coding: utf8 -*-

import datetime
import jinja2
import json
import os
import shutil
import sys
import time

from libsw3 import *

def cpt(t):
    import json
    print(json.dumps(t,encoding="gbk",ensure_ascii=False,indent=4))

rd={}   #保存读入用的数据，转换成模板需要的格式

class data2:
    '生成tajk_data2.c'
    def __init__(self):
        c文件名,field文件名,filefield文件名=['tajk_data2.c','../data/field.txt','../data/filefield.txt']
        self.读入field(field文件名)
        self.读入filefield(filefield文件名)
        self.扫描其它文件()
        t=open("tajk_data2.tpl","r",encoding="utf8").read()
        tmpl=jinja2.Template(t)
        cf=open(c文件名,"w",encoding="utf8")
        cf.write(tmpl.render(rd))
        cf.close()
    def convver(self,ver):
        return {"2.1":21,"2.2":22}[ver]
    def 读入field(self,field文件名):  #处理 字段数据字典 即 tajk_field 数据
        self.field={}
        self.字段字典={}
        xh=0
        for l in open(field文件名,"r",encoding="gbk").readlines():
            版本,字段id,字段名,字段类型,长度,小数,说明=l.split("|")[:7]
            self.field["%s|%s" %(版本,字段id)]=xh
            xh=xh+1
            if 小数=="":小数="0"
            self.字段字典[f"{版本}|{字段id}"]=[字段名,字段类型,长度,小数]
    def 读入filefield(self,filefield文件名):  #处理 各接口文件字段列表 即 tajk_datafile_field 数据
        rd["文件字段"]=[]
        for l in open(filefield文件名,"r",encoding="gbk").readlines():
            d=l.split("|")
            版本,文件类型,字段id=d[:3]
            字段名,字段类型,长度,小数=self.字段字典[f"{版本}|{字段id}"]
            rd["文件字段"].append({"版本":self.convver(版本),"文件类型":文件类型,"字段名":字段名,"字段类型":字段类型,"长度":长度,"小数":小数})
    def 扫描其它文件(self):
        for 文件 in os.listdir("../data"):
            if not 文件.endswith(".txt"):continue
            s=文件[:-4].split("-")
            if len(s)!=2:continue
            版本,文件类型=s
            self.读入其它文件(版本,文件类型,文件)
    def 读入其它文件(self,版本,文件类型,文件):
        for l in open(f"../data/{文件}","r").readlines():
            d=l.strip().split("|")
            字段名,字段类型,长度,小数=d[:4]
            rd["文件字段"].append({"版本":版本,"文件类型":文件类型,"字段名":字段名,"字段类型":字段类型,"长度":长度,"小数":小数})

sw3.start(globals(),"c工具")
